package com.atguigu.lease.common.handler;

import com.atguigu.lease.common.exception.StgyException;
import com.atguigu.lease.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice //异常处理后返回json  相当于@ControllerAdvice+@ResponseBody
@Slf4j
//@ControllerAdvice 异常处理后返回转发重定向视图
public class StgyGlobalExceptionHandler {
    //异常处理器捕获controller接口的异常后 返回一个失败的Result对象
    //1 最大异常的处理器
    @ExceptionHandler(value = Exception.class)
    public Result exception(Exception e){
        //将异常的堆栈日志信息记录到日志中  堆栈日志包含了出现异常的原因 出现的类 行
        log.error(ExceptionUtils.getStackTrace(e));
        return Result.fail();
    }
    //2 自定义异常处理器
    @ExceptionHandler(value = StgyException.class)
    public Result exception(StgyException e){
        if(e.getThrowable()!=null){
            //获取真实堆栈日志打印
            log.error(ExceptionUtils.getStackTrace(e.getThrowable()));
        }
        return Result.build(e.getCode(),e.getMessage(),false , null);
    }
}
